/** ==================================================================================== **/
/** 								Definizione della DIALOG   							 **/
/** ==================================================================================== **/

/**
 * Per utilizzare i metodi pubblici del service è necessario iniettare nei propri service e/o controller la classe "DialogService".
 */
BootApplication.service('DialogService', [ '$log', 'ngDialog', '$translate', "configuration", function( $log, ngDialog, $translate, configuration ) {

	
	this.iconPath = configuration.getParam("Constants").ContextPath + "images/iconAlert/";
	
	/**
	 * Apre l' alert box configurata secondo i parametri forniti in ingresso,
	 * se vuoti per default viene aperta una popup con la veste grafica di un'alert informativo.
	 * 
	 * @param {@link String} message, message to display on the alert box (Required)(già tradotto)
	 * @param {@link String} title,  title of the box (già tradotto)
	 * @param {@link Boolean} isInfo
	 * @param {@link Boolean} isError
	 * @param {@link Boolean} isSuccess
	 * 
	 * @returns {Boolean}
	 */
	this.showMessageAlertApplication = function(message, title, isInfo, isError, isSuccess) {
		
		var iconError   = this.iconPath + "errorAlert.png";
		var iconInfo    = this.iconPath + "infoAlert.png";
		var iconSuccess = this.iconPath + "successAlert.png";
		
		var ngDialogIco   = "";
		var ngDialogTitle = "";
		
		if(isError){
			ngDialogIco   = iconError;
			ngDialogTitle = $translate.instant("PopupAlert.attenzione");
			if(!message)
				message = $translate.instant('PopupAlert.message.generic.attenzione');
		} else if(isSuccess){
			ngDialogIco   = iconSuccess;
			ngDialogTitle = $translate.instant("PopupAlert.success"); 
			if(!message)
				message = $translate.instant('PopupAlert.message.generic.success');
	// deafult is info
		} else{
			ngDialogIco   = iconInfo;
			ngDialogTitle = $translate.instant("PopupAlert.info");
			if(!message)
				message = $translate.instant('PopupAlert.message.generic.info');
		}
			
		/**
		 * Open popup alert
		 */
		ngDialog.open({data: {title    : (angular.isDefined(title) && title != null && !angular.equals(title, "")) ? title : ngDialogTitle 
				             ,message  : message
				             ,isAlert  : true
				             ,isConfirm: false
				             ,ico      : ngDialogIco 
			                 }
		             });
	}// close showMessageAlertApplication
	/**
	 * Function per info dialog generico
	 * @param message: il messaggio
	 */
	this.showInfoAlertApplication = function(message, title) {
		this.showMessageAlertApplication(message, title, true, false, false);
	};
	/**
	 * Function per error dialog generico
	 * @param message: il messaggio
	 */
	this.showErrorAlertApplication = function(message, title) {
		this.showMessageAlertApplication(message, title, false, true, false);
	};
	/**
	 * Function per success dialog generico
	 * @param message: il messaggio
	 */
	this.showSuccessAlertApplication = function(message, title) {
		this.showMessageAlertApplication(message, title, false, false, true);
	};

	/** 
	 * Funzione generica di conferma.
	 *
	 * @param {@link Function} saveFunction, Funzione di callback da richiamare alla pressione del tasto Conferma
	 * @param {@link Function} cancelFunction, Funzione di callback da richiamare alla pressione del tasto Annulla
	 * @param {@link String} message, Messaggio personalizzato di conferma (già tradotto)
	 * 
	 * @return dialog instance
	 */
	this.confirmOperation = function (saveFunction, cancelFunction, message){
		
		var ngDialogIco     = this.iconPath + "infoAlert.png";
		var ngDialogTitle   = $translate.instant("PopupAlert.conferma");
		var ngDialogMessage = $translate.instant("message.operation.confirm");
		
		/**
		 * Open popup confirm
		 */
		var dialog = ngDialog.open({data: {title    : ngDialogTitle
			                              ,message  : (angular.isDefined(message) && message != null && !angular.equals(message, "")) ? message : ngDialogMessage
			                              ,isAlert  : false
			                              ,isConfirm: true
			                              ,ico      : ngDialogIco
			                              ,confirm  : saveFunction
			                              ,close    : cancelFunction
						                  }
					              });
		
		return dialog;
	}// close confirmOperation
	
	/**
	 * TODO COME SI USA? COSA FA?
     */
	this.showCustomDialog = function(templateUrl, customController, param,w ,h) {

		/**
		 * Open popup alert
		 */
		ngDialog.open({
			template: templateUrl,
			controller: customController,
			width: w,
			height: h,
			data: param
		});
	}// close showCustomDialog
	
}]);